package com.example.basic.web.mapper.zoneDepot;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.basic.base.BaseEntityMapper;
import com.example.basic.web.model.zoneDepot.ZoneDepot;
import com.example.basic.web.request.DepotQueryRequest;
import com.example.basic.web.response.report.StockCountResponse;
import com.example.basic.web.response.report.StockSumReportResponse;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 系统操作日志表 Mapper 接口
 * </p>
 *
 */
@Mapper
public interface ZoneDepotMapper extends BaseEntityMapper<ZoneDepot> {

    /**
     * 分区通道列表
     *
     * @param queryPage   分页
     * @param searchParam 模糊搜索(拼音码,五笔码,名称,编码)
     * @param isAll       是否查询全部 0-否，1-是
     * @param zoneCode    分区编码
     * @param pharmCode 仓库编码
     * @return
     */
    IPage<ZoneDepot> queryList(Page<ZoneDepot> queryPage, @Param("searchParam") String searchParam, @Param("isAll") String isAll,
                               @Param("zoneCode")  String zoneCode, @Param("pharmCode") String pharmCode);

    /**
     * 根据分区清空库位
     * @param zoneCode 分区编码
     */
    void removeByZoneCde(@Param("zoneCode") String zoneCode);

    /**
     * 分区详情
     * @param depotCode 库位编码
     * @return
     */
    ZoneDepot detail(@Param("depotCode") String depotCode);


    /**
     * 库位信息查询
     * @param queryPage 分页
     * @param depotQueryRequest
     * @return
     */
    IPage<StockCountResponse> queryDepotInfo(Page<StockCountResponse> queryPage, @Param("depotQueryRequest") DepotQueryRequest depotQueryRequest);

    /**
     * 库位信息统计
     * @param depotQueryRequest
     * @return
     */
    Map depotCount(@Param("depotQueryRequest") DepotQueryRequest depotQueryRequest);

    /**
     * 库存汇总查询
     * @param pharmCode 仓库编码
     * @param zoneCode 分区编码
     * @return
     */
    List<StockSumReportResponse> stockSumReport(@Param("pharmCode") String pharmCode, @Param("zoneCode") String zoneCode);

    /**
     * 空闲库位列表
     * @param pharmCode 仓库编码
     * @param zoneCode 分区编码
     * @return
     */
    List<ZoneDepot> freeDepotList(@Param("pharmCode") String pharmCode, @Param("zoneCode") String zoneCode);

    /**
     * 获取库位位置
     * @param depotCode 库位编码
     * @return
     */
    String getDepotAddress(@Param("depotCode") String depotCode);

    /**
     * 库位统计对比情况
     * @return
     */
    List<Map> homeDepotCount(@Param("pharmCode") String pharmCode);
}